"""
通过requests编写测试脚本模拟请求发送：进入商品详情页，添加购物车、购物车查询 、结算商品、提交订单请求，代码提交py文件即可。
注意接口依赖的数据
有接口关联，用字典的取值方式提取数据。
结算商品的basketIds 先手动获取。因为目前学到的 无法从购物车查询接口结果里获取。--手动去取数据 不是字典格式

"""
import requests
from jsonpath import jsonpath
from tools.read_pathlib import pic_path
proxies = {"http":"http://192.168.1.5:8888"}
"""进入商品详情页"""
# 第一步：登录，获取token
login_url = "http://shop.lemonban.com:8107/login"
login_param = {"principal":"lemon_py","credentials":"12345678","appType":3,"loginType":0}
login_res = requests.request(method="post",url=login_url,json=login_param)
token = jsonpath(login_res.json(),"$..access_token")[0]

# 第二步：搜索商品，获取变量prodid
search_url = "http://shop.lemonban.com:8107/search/searchProdPage"
search_param = {"prodName":"小黄人来咯"}
search_res = requests.request(method="get",url=search_url,params=search_param)
# print(search_res.text)
prodid = jsonpath(search_res.json(),"$..prodId")[0]

# 第三步：进入该商品详情页
prod_info_url = "http://shop.lemonban.com:8107/prod/prodInfo"
prod_info_param = {"prodId":prodid}
prod_info_res = requests.request(method="get",url=prod_info_url,params=prod_info_param)
# print(prod_info_res.json())
skuid = jsonpath(prod_info_res.json(),"$..skuId")[0]
# print(skuid)
#
#
# """添加购物车"""
# # 参数需要商品详情页的 prodId,skuId
# changeitem_url = "http://shop.lemonban.com:8107/p/shopCart/changeItem"
# changeitem_header = {"Authorization":f"bearer{token}"}
# changeitem_param = {"basketId":0,"count":1,"prodId":prodid,"shopId":1,"skuId":skuid}
# changeitem_res = requests.request(method="post",url=changeitem_url,json=changeitem_param,
#                                   headers=changeitem_header)
# # print(changeitem_res.text)
#
# # """获取购物车商品"""
# shopcart_info_url = "http://shop.lemonban.com:8107/p/shopCart/info"
# shopcart_info_header = {"Authorization":f"bearer{token}"}
# shopcart_info_res = requests.request(method="post",url=shopcart_info_url,json=[],headers=shopcart_info_header)
#
# basketid = jsonpath(shopcart_info_res.json(),"$..basketId")
# print(basketid)
#
# # """结算商品"""
# order_confirm_url = "http://shop.lemonban.com:8107/p/order/confirm"
# order_confirm_header = {"Authorization":f"bearer{token}","Content-Type":"application/json; charset=UTF-8"}
# order_confirm_param = {"addrId":0,"basketIds":basketid,"couponIds":[],
#                        "isScorePay":0,"userChangeCoupon":0,"userUseScore":0}
# order_confirm_res = requests.request(method="post",url=order_confirm_url,headers=order_confirm_header,
#                                      json=order_confirm_param)
# print(order_confirm_res.json())
# #
# # # 提交订单
# submitorder_url = "http://shop.lemonban.com:8107/p/order/submit"
# submitorder_param = {"orderShopParam":[{"remarks":"","shopId":1}]}
# submitorder_header = order_confirm_header
# submitorder_res = requests.request(method="post",url=submitorder_url,json=submitorder_param,
#                                    headers=submitorder_header)
# print(submitorder_res.json())


"""
 - multipart/form-data：支持文件/图片等传输 ,一般都是文件 图片上传接口
    -- 二进制流的格式传输的
    -- 需要files关键字接受 文件参数。
        - 文件参数也要用字典的格式表示：
         {name: (filename,文件对象(open打开),媒体类型(Content-Type))}
    * name是你传的是啥 ，开发定义的名字参数的名字
    * filename：可以自己定义上传的文件的名字 不用跟真实的名字一样； 抓包就是直接用的文件名字；然后会显示在数据库里filename字段里。 不加 就默认用文件本身的名字。
    * 媒体类型：content-type也可以不加， 其实就是MIME类型，但是可以不加 可以自动识别识别文件媒体类型。
"""
upload_url = "http://shop.lemonban.com:8107/p/file/upload"
upload_header = {"Authorization":f"bearer{token}"}
# 上传接口 ： multipart/form-data：支持文件/图片等传输 ,一般都是文件 图片上传接口  files接受参数
# file_obj = {"file":open("tricy.png","rb")}  # 文件参数
file_obj = {"file":("py65图片",open( pic_path/'tricy.png',"rb"),"image/jpeg")}  # 文件参数
res = requests.request(method="post",url=upload_url,files=file_obj,headers=upload_header)
print(res.text)
